package model

import (
	"time"

	"go.mongodb.org/mongo-driver/bson/primitive"
)

type AssistantSetting struct {
	Name        string `bson:"name" json:"name"`
	PaperFileId string `bson:"paper_id" json:"paper_id"`
	SystemMsg   string `bson:"system_msg" json:"system_msg"`
}

type LlmInfo struct {
	LlmName   string `bson:"llm_name" json:"llm_name"`
	Tags      string `bson:"tags" json:"tags"`
	MaxTokens int    `bson:"max_tokens" json:"max_tokens"`
	ModelType string `bson:"chat" json:"chat"`
	IsTools   bool   `bson:"is_tools" json:"is_tools"`
}

type LlmSetting struct {
	Temperature      float64 `bson:"temperature,omitempty" json:"temperature,omitempty"`
	TopP             float64 `bson:"top_p,omitempty" json:"top_p,omitempty"`
	FrequencyPenalty float64 `bson:"frequency_penalty,omitempty" json:"frequency_penalty,omitempty"`
	PresencePenalty  float64 `bson:"presence_penalty,omitempty" json:"presence_penalty,omitempty"`
}

type ModelSetting struct {
	LlmFactory string      `bson:"llm_factory" json:"llm_factory"`
	ApiKey     string      `bson:"api_key" json:"api_key"`
	Llm        LlmInfo     `bson:"llm" json:"llm"`
	LlmSetting *LlmSetting `bson:"llm_setting,omitempty" json:"llm_setting,omitempty"`
}

type Assistant struct {
	ID       primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
	UpdateAt time.Time          `bson:"updateAt,omitempty" json:"updateAt,omitempty"`
	CreateAt time.Time          `bson:"createAt,omitempty" json:"createAt,omitempty"`

	UserId           int64            `bson:"userId" json:"userId"`
	AssistantSetting AssistantSetting `bson:"assistant_setting" json:"assistant_setting"`
	ModelSetting     ModelSetting     `bson:"model_setting" json:"model_setting"`
	LastUseAt        time.Time        `bson:"lastUseAt" json:"lastUseAt"`
}

type AssistantMeta struct {
	ID        primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
	Name      string             `bson:"name" json:"name"`
	LastUseAt time.Time          `bson:"lastUseAt" json:"lastUseAt"`
}
